Veo el error que especifiqué en mi título y ninguna de las soluciones existentes aquí parece ayudar, por lo que espero que alguien pueda darme una idea de lo que está sucediendo.
Estoy usando Typescript y Node en mi proyecto. TS compila todo muy bien... termino con lo siguiente como se esperaba:
projectHome/ dist/ schema/ schema.js index.js Cuando ejecuto node ./dist/index.js desde el inicio del proyecto, aparece el error no se puede encontrar el módulo '/home/me/projectHome/dist/schema/schema' importado de '/home/me/projectHome/dist/index. js'
Las importaciones relativas en index.js son las siguientes:
import express from 'express'; import { ApolloServer } from 'apollo-server-express'; import typeDefs from './schema/schema';Mi archivo schema.ts contiene:
import { ApolloServer, gql } from 'apollo-server-express' import { GraphQLScalarType } from 'graphql' const typeDefs = gql` ...(edited for brevity/sanity) ` export default typeDefsy mi archivo mecanografiado (¿debería importar esto en este punto ya que es el Nodo el que está fallando?) se ve así:
{ "compilerOptions": { "target": "ES6", "module": "ES6", "lib": ["ES6"], "allowJs": true, "sourceMap": true, "outDir": "./dist", "rootDir": "./src", "strict": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "files": ["src/@types/graphql.d.ts"], "include": ["src/**/*", "serverInfo.json"], "exclude": ["node_modules", "**/*.spec.ts"] }Tenga en cuenta que no puedo usar commonjs porque algún código relacionado con objeciones falla cuando lo hago. ¿El problema está realmente relacionado con el uso de módulos ES6 o hay algún otro problema?
¡Gracias de antemano!
-Chris
Debe usar importaciones totalmente calificadas al alimentar módulos ES6 a Node.js.
En su caso, esto significa agregar la extensión .js a la importación de su schema :
import express from 'express'; import { ApolloServer } from 'apollo-server-express'; -import typeDefs from './schema/schema'; +import typeDefs from './schema/schema.js'; Es probable que su confusión provenga del hecho de que este requisito ha cambiado entre las referencias tradicionales de estilo require() (llamadas "CommonJS" y detalladas aquí ) y los módulos ECMAScript más modernos, pero mientras tanto, muchas herramientas que convertido entre uno y otro resolvería este problema por usted (es decir , Webpack y amigos). Ahora que estas características están aterrizando de manera de primera clase en Node, se está encontrando con algunas cosas adicionales que las herramientas más antiguas estaban haciendo Magically™ para usted, ¡pero en realidad no funciona de esa manera en la especificación!